
'''
def removeDuplicates(nums):
    nums = list(set(nums))  # 创建新对象，原nums未被修改
在Python中nums = list(set(nums))实际创建了新列表
原数组未被修改，函数外部的nums还是[1,1,2]
LeetCode检查原数组前n个元素→前2个还是[1,1]
'''

# 双指针
from typing import List
class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        if not nums:
            return 0
        slow = fast = 1
        n = len(nums)
        while fast<n:
            if nums[fast] != nums[fast-1]:
                nums[slow] = nums[fast]
                slow += 1
            fast += 1
        return  slow

# [1,2,3,3]
print(Solution().removeDuplicates([1,1,2]))


'''
复杂度分析

时间复杂度：O(n)，其中 n 是数组的长度。快指针和慢指针最多各移动 n 次。

空间复杂度：O(1)。只需要使用常数的额外空间。
'''




